/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.moxiu.browser;

import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.moxiu.launcher.R;
import com.moxiu.sdk.statistics.MxStatAgent;
import com.moxiu.browser.NavTabScroller.OnLayoutListener;
import com.moxiu.browser.NavTabScroller.OnRemoveListener;
import com.moxiu.browser.TabControl.OnThumbnailUpdatedListener;
import com.moxiu.browser.UI.ComboViews;
import com.moxiu.browser.preferences.BrowserAlcPost;

import java.util.HashMap;

public class NavScreen extends RelativeLayout
        implements OnClickListener, OnMenuItemClickListener, OnThumbnailUpdatedListener {


    UiController mUiController;
    PhoneUi mUi;
    Tab mTab;
    Activity mActivity;
    View view;

    ImageButton mRefresh;
    ImageButton mForward;
    ImageButton mBookmarks;
    ImageButton mMore;
    ImageButton mNewTab;
    ImageView mBack;
    FrameLayout mHolder;

    TextView mTitle;
    ImageView mFavicon;
    ImageButton mCloseTab;

    NavTabScroller mScroller;
    TabAdapter mAdapter;
    int mOrientation;
    boolean mNeedsMenu;
    HashMap<Tab, View> mTabViews;
	private TextView mText;

    public NavScreen(Activity activity, UiController ctl, PhoneUi ui) {
        super(activity);
        mActivity = activity;
        mUiController = ctl;
        mUi = ui;
        mOrientation = activity.getResources().getConfiguration().orientation;
        init();

        }
     private class TouchListener implements OnTouchListener{

		@Override
		public boolean onTouch(View arg0, MotionEvent event) {
			switch  (event.getAction()) {
			 case MotionEvent.ACTION_DOWN:
			   {
			    mNewTab.setBackgroundColor(0x7d111111); 
		        mBack.setBackgroundColor(0x7d111111); 
			    break;
			   }
			   case MotionEvent.ACTION_UP:
			   {
				   mNewTab.setBackgroundColor(0x111111); 
			        mBack.setBackgroundColor(0x111111); 
			    break;
			   }
			   default:					    
				    break;
			}
			return false;
		}
    	 
     }

//    protected void showMenu() {
//        PopupMenu popup = new PopupMenu(mContext, mMore);
//        Menu menu = popup.getMenu();
//        popup.getMenuInflater().inflate(R.menu.br_browser, menu);
//        mUiController.updateMenuState(mUiController.getCurrentTab(), menu);
//        popup.setOnMenuItemClickListener(this);
//        popup.show();
//    }

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        return mUiController.onOptionsItemSelected(item);
    }

    protected float getToolbarHeight() {
        return mActivity.getResources().getDimension(R.dimen.toolbar_height);
    }

    @Override
    protected void onConfigurationChanged(Configuration newconfig) {
        if (newconfig.orientation != mOrientation) {
            int sv = mScroller.getScrollValue();
            removeAllViews();
            mOrientation = newconfig.orientation;
            init();
            mScroller.setScrollValue(sv);
            mAdapter.notifyDataSetChanged();
        }
    }

    public void refreshAdapter() {
        mScroller.handleDataChanged(
                mUiController.getTabControl().getTabPosition(mUi.getActiveTab()));
    }

    private void init() {
        LayoutInflater.from(mContext).inflate(R.layout.br_nav_screen, this);
        /*setContentDescription(mContext.getResources().getString(
                R.string.accessibility_transition_navscreen));*/
       // mBookmarks = (ImageButton) findViewById(R.id.bookmarks);
        
        initview();
        
        mScroller = (NavTabScroller) findViewById(R.id.scroller);
        TabControl tc = mUiController.getTabControl();
        mTabViews = new HashMap<Tab, View>(tc.getTabCount());
        mAdapter = new TabAdapter(mContext, tc);
        mScroller.setOrientation(mOrientation == Configuration.ORIENTATION_LANDSCAPE
                ? LinearLayout.HORIZONTAL : LinearLayout.VERTICAL);
        // update state for active tab
        mScroller.setAdapter(mAdapter,
                mUiController.getTabControl().getTabPosition(mUi.getActiveTab()));
        mScroller.setOnRemoveListener(new OnRemoveListener() {
            public void onRemovePosition(int pos) { 
            	Tab tab = mAdapter.getItem(pos);
                onCloseTab(tab);
                if (!BrowserAlcPost.isClickRemoveTab) {
                	MxStatAgent.onEvent("Browser_MultipageDelete_PPC_CY","condition","Slide");
				}else {
					MxStatAgent.onEvent("Browser_MultipageDelete_PPC_CY", "condition","Clickbutton");
				}
            	changeMulitTabNumber();
            }
        });
        mNeedsMenu = !ViewConfiguration.get(getContext()).hasPermanentMenuKey();
        if (!mNeedsMenu) {
            //mMore.setVisibility(View.GONE);
        }
    }

    public void initview(){
         view =(View)findViewById(R.id.nav_lay);      
         view.setOnTouchListener(new TouchListener());
         mNewTab = (ImageButton) findViewById(R.id.adds);
         mBack = (ImageView) findViewById(R.id.back);    
         mText = (TextView) findViewById(R.id.b_multi_tab_num);
         findViewById(R.id.back_layout).setOnClickListener(this);
         
         mNewTab.setOnClickListener(this);       
         mBack.setOnClickListener(this);
         
         changeMulitTabNumber();
    }
    @Override
    public void onClick(View v) {
        if (mBookmarks == v) {
            mUiController.bookmarksOrHistoryPicker(ComboViews.Bookmarks);
        } else if (mNewTab == v) {
            openNewTab();
            mUi.isNew=1;
            mScroller.setclickposition();
            MxStatAgent.onEvent("Browser_MultipageAdd_PPC_CY");
        } else if (mBack == v || R.id.back_layout == v.getId()) {
        	  close(mUiController.getTabControl().getCurrentPosition());
        }
    }

    private void onCloseTab(Tab tab) {
        if (tab != null) {
            if (tab == mUiController.getCurrentTab()) {
                mUiController.closeCurrentTab();
            } else {
                mUiController.closeTab(tab);
            }
            mTabViews.remove(tab);
      
        }
    }

    private void openNewTab() {
        // need to call openTab explicitely with setactive false
        final Tab tab = mUiController.openTab(BrowserSettings.getInstance().getHomePage(),
                false, false, false);
        //switchToTab(tab);
        if (tab != null) {
            mUiController.setBlockEvents(true);
            final int tix = mUi.mTabControl.getTabPosition(tab);
            mScroller.setOnLayoutListener(new OnLayoutListener() {

                @Override
               public void onLayout(int l, int t, int r, int b) {
                    final int pos = mUi.mTabControl.getTabPosition(tab);
                    mUi.hideNavScreen(pos, true);

                   switchToTab(tab);
               }
            });
            mScroller.handleDataChanged(tix);
           mUiController.setBlockEvents(false);
        }
    }

    private void switchToTab(Tab tab) {
        if (tab != mUi.getActiveTab()) {
            mUiController.setActiveTab(tab);
        }
    }

    protected void close(int position) {
        close(position, true);
    }

    protected void close(int position, boolean animate) {

        mUi.hideNavScreen(position, animate);
    }

    protected NavTabView getTabView(int pos) {
        return mScroller.getTabView(pos);
    }

    class TabAdapter extends BaseAdapter {

        Context context;
        TabControl tabControl;

        public TabAdapter(Context ctx, TabControl tc) {
            context = ctx;
            tabControl = tc;
        }

        @Override
        public int getCount() {
            return tabControl.getTabCount();
        }

        @Override
        public Tab getItem(int position) {
            return tabControl.getTab(position);
        }

        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            final NavTabView tabview = new NavTabView(mActivity);
            final Tab tab = getItem(position);
            tabview.setWebView(tab);
            mTabViews.put(tab, tabview.mImage);
            tabview.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (tabview.isClose(v)) {
                        mScroller.animateOut(tabview);
                        mTabViews.remove(tab);
                        BrowserAlcPost.isClickRemoveTab = true;
//                        new BrowserAlcPost(mContext).postMultiPageDeleteEventData(BrowserAlcPost.CONDITION_CLICKBUTTON);
//                        MobclickAgent.onEvent(mActivity, "Brower_multipage_delete_ZM522", "Clickbutton");
                    }
//                        else if (tabview.isTitle(v)) {
//                       /* switchToTab(tab);
//                        mUi.getTitleBar().setSkipTitleBarAnimations(true);
//                        close(position, false);
//                        mUi.editUrl(false, true);
//                        mUi.getTitleBar().setSkipTitleBarAnimations(false);*/
//                    	mScroller.setclickposition(position);
//                        close(position);
//                    } else if (tabview.isWebView(v)) {                   	                   
//                    	mScroller.setclickposition(position);
//                        close(position);
//                    }
                        else {
                        mUi.isNew=1;
                    	mScroller.setclickposition(position);
                    	close(position);
					}
                }
            });
            return tabview;
        }
    }

    @Override
    public void onThumbnailUpdated(Tab t) {
        View v = mTabViews.get(t);
        if (v != null) {
            v.invalidate();
        }
    }
    
    private void changeMulitTabNumber() {
		int tabs = 0;
		if ( mUiController.getTabs() != null) {
			tabs = mUiController.getTabs().size();
		}
		
		if (tabs > 0) {
			mText.setText(""+tabs);
			mText.setVisibility(View.VISIBLE);
		} else {
			mText.setText("");
			mText.setVisibility(View.GONE);
		}
	}

}
